package com.xquant.pricing.calc.entity.simple;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;

import java.math.BigDecimal;

/**
 * @Author: xpp -_- -_-
 * @Date: 2021/11/2 13:53
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
public class LegData {
    @JsonProperty
    private String TrdType;//期权方向 1010 买入 1011 卖出
    @JsonProperty
    private String UnderlyerId;//期权标的 标的Code+Wind市场
    @JsonProperty
    private String EffectiveDate;//期权起始日
    @JsonProperty
    private String TerminationDate;//期权到期日
    @JsonProperty
    private String SettlementDateOffset; //期权结算偏移
    @JsonProperty
    private String  FixingDate;   //期权定盘日
    @JsonProperty
    private String Notional;   //本金单位 元
    @JsonProperty
    private String Term;  //期权合约期限，默认不填写=到期日-起始日
    @JsonProperty
    private String  SpotPrice;  //标的起初价格
    @JsonProperty
    private String  ObserveType;  //E:欧式鲨鱼鳍 A：美式鲨鱼鳍
    @JsonProperty
    private String  TriggerRate;//障碍价比例
    @JsonProperty
    private String  TriggerPrice;//障碍价
    @JsonProperty
    private String  TriggerLevelInclude;   // 0 不包含障碍价，1 包含障碍价
    @JsonProperty
    private String  OptionType;   // Call:牛市价差，Put：熊市价差
    @JsonProperty
    private String  LowerStrikeRate;   //低行权价比例
     @JsonProperty
    private String  LowerStrikePrice;   //低行权
    @JsonProperty
    private String  UpperStrikeRate;   //高行权价比例
    @JsonProperty
    private String  UpperStrikePrice;   //高行权价
    @JsonProperty
    private String  LowerTriggerRate;   //低障碍价比例
    @JsonProperty
    private String  LowerTriggerPrice;   //低障碍价
    @JsonProperty
    private String  LowerTriggerLevelInclude;   //0 不包含障碍价，1 包含障碍价
    @JsonProperty
    private BigDecimal annualRatio;   // 年化系数

    public BigDecimal getAnnualRatio() {
        return annualRatio;
    }

    public void setAnnualRatio(BigDecimal annualRatio) {
        if (annualRatio != null) {
            this.annualRatio = annualRatio;
        }
    }

    public String getUpperTriggerLevelInclude() {
        return UpperTriggerLevelInclude;
    }

    public void setUpperTriggerLevelInclude(String upperTriggerLevelInclude) {
        UpperTriggerLevelInclude = upperTriggerLevelInclude;
    }

    @JsonProperty
    private String  UpperTriggerLevelInclude;   //0 不包含障碍价，1 包含障碍价
    @JsonProperty
    private String  UpperTriggerRate;   //高障碍价比例
    @JsonProperty
    private String  UpperTriggerPrice;   //高障碍价

    public String getTriggerPrice() {
        return TriggerPrice;
    }

    public void setTriggerPrice(String triggerPrice) {
        if (triggerPrice != null) {
            this.TriggerPrice = triggerPrice;
        }
    }

    public String getLowerStrikePrice() {
        return LowerStrikePrice;
    }

    public void setLowerStrikePrice(String lowerStrikePrice) {
        if (lowerStrikePrice != null) {
            this.LowerStrikePrice = lowerStrikePrice;
        }
    }

    public String getUpperStrikePrice() {
        return UpperStrikePrice;
    }

    public void setUpperStrikePrice(String upperStrikePrice) {
        if (upperStrikePrice != null) {
            this.UpperStrikePrice = upperStrikePrice;
        }
    }

    public String getLowerTriggerPrice() {
        return LowerTriggerPrice;
    }

    public void setLowerTriggerPrice(String lowerTriggerPrice) {
        if (lowerTriggerPrice != null) {
            this.LowerTriggerPrice = lowerTriggerPrice;
        }
    }

    public String getUpperTriggerPrice() {
        return UpperTriggerPrice;
    }

    public void setUpperTriggerPrice(String upperTriggerPrice) {
        if (upperTriggerPrice != null) {
            this.UpperTriggerPrice = upperTriggerPrice;
        }
    }

    public String getLowerTriggerRate() {
        return LowerTriggerRate;
    }

    public void setLowerTriggerRate(String lowerTriggerRate) {
        LowerTriggerRate = lowerTriggerRate;
    }

    public String getLowerTriggerLevelInclude() {
        return LowerTriggerLevelInclude;
    }

    public void setLowerTriggerLevelInclude(String lowerTriggerLevelInclude) {
        LowerTriggerLevelInclude = lowerTriggerLevelInclude;
    }

    public String getUpperTriggerRate() {
        return UpperTriggerRate;
    }

    public void setUpperTriggerRate(String upperTriggerRate) {
        UpperTriggerRate = upperTriggerRate;
    }

    public String getLowerRebateRate() {
        return LowerRebateRate;
    }

    public void setLowerRebateRate(String lowerRebateRate) {
        LowerRebateRate = lowerRebateRate;
    }

    public String getUpperRebateRate() {
        return UpperRebateRate;
    }

    public void setUpperRebateRate(String upperRebateRate) {
        UpperRebateRate = upperRebateRate;
    }

    @JsonProperty
    private String  LowerRebateRate;   //低补偿收益率
    @JsonProperty
    private String  LowerRebatePrice;   //低补偿收益
    @JsonProperty
    private String  UpperRebateRate;   //高补偿收益率
    @JsonProperty
    private String  UpperRebatePrice;   //高补偿收益率
    @JsonProperty
    private String  StrikeRate;   //行权价比例
    @JsonProperty
    private String  StrikeInclude;   //行权价是否包含 0 不包含，1 包含，默认 为0
    @JsonProperty
    private String  IfAnnual;   //是否年化1年化，0非年化，默认非年化
    @JsonProperty
    private String  DayCounter;  //计息基准，IfAnnual=1，不填写默认A/365
    @JsonProperty
    private String  MinYield;  //保底收益率，默认0
    @JsonProperty
    private String  MinYieldPrice;  //保底收益，默认0
    @JsonProperty
    private String  RebateRate;  //行权收益率
    @JsonProperty
    private String  RebatePrice;  //行权收益率
    @JsonProperty
    private String  SnowballRate;  //中泰的雪球保底（用于按日计提的计算）
    @JsonProperty
    private KnockOut  KnockOut;  //敲出实体
    @JsonProperty
    private UnTrigger  unTrigger;  //敲入实体
    @JsonProperty
    private MinimumYield[]  minimumYields;  //最小收益率

    public String getLowerRebatePrice() {
        return LowerRebatePrice;
    }

    public void setLowerRebatePrice(String lowerRebatePrice) {
        if (lowerRebatePrice != null) {
            this.LowerRebatePrice = lowerRebatePrice;
        }
    }

    public String getUpperRebatePrice() {
        return UpperRebatePrice;
    }

    public void setUpperRebatePrice(String upperRebatePrice) {
        if (upperRebatePrice != null) {
            this.UpperRebatePrice = upperRebatePrice;
        }
    }

    public String getMinYieldPrice() {
        return MinYieldPrice;
    }

    public void setMinYieldPrice(String minYieldPrice) {
        if (minYieldPrice != null) {
            this.MinYieldPrice = minYieldPrice;
        }
    }

    public String getRebatePrice() {
        return RebatePrice;
    }

    public void setRebatePrice(String rebatePrice) {
        if (rebatePrice != null) {
            this.RebatePrice = rebatePrice;
        }
    }

    public Rebate[] getRebateList() {
        return RebateList;
    }

    public void setRebateList(Rebate[] rebateList) {
        RebateList = rebateList;
    }

    @JsonProperty
    private Rebate[]  RebateList;  //二元收益率结构


    public KnockOut getKnockOut() {
        return KnockOut;
    }

    public void setKnockOut(KnockOut knockOut) {
        this.KnockOut = knockOut;
    }

    public UnTrigger getUnTrigger() {
        return unTrigger;
    }

    public void setUnTrigger(UnTrigger unTrigger) {
        this.unTrigger = unTrigger;
    }

    public MinimumYield[] getMinimumYields() {
        return minimumYields;
    }

    public void setMinimumYields(MinimumYield[] minimumYields) {
        this.minimumYields = minimumYields;
    }

    public void setSnowballRate(String snowballRate) {
        SnowballRate = snowballRate;
    }

    public String getSnowballRate() {
        return SnowballRate;
    }

    public String getRebateParticipationRate() {
        return RebateParticipationRate;
    }

    public void setRebateParticipationRate(String rebateParticipationRate) {
        RebateParticipationRate = rebateParticipationRate;
    }

    @JsonProperty
    private String  RebateParticipationRate;  //补偿参与率

    @JsonProperty
    private String  ParticipationRate;  //期权参与率
    @JsonProperty
    private String  PayStyle; //PayOnHit（立即支付）、PayOnExpire（到期支付）
    @JsonProperty
    private String  ScheduleType;//0：连续观察，1：每日观察,2、到期 3、其他，默认0

    public String getTrdType() {
        return TrdType;
    }

    public void setTrdType(String trdType) {
        TrdType = trdType;
    }

    public String getUnderlyerId() {
        return UnderlyerId;
    }

    public void setUnderlyerId(String underlyerId) {
        UnderlyerId = underlyerId;
    }

    public String getEffectiveDate() {
        return EffectiveDate;
    }

    public void setEffectiveDate(String effectiveDate) {
        EffectiveDate = effectiveDate;
    }

    public String getTerminationDate() {
        return TerminationDate;
    }

    public void setTerminationDate(String terminationDate) {
        TerminationDate = terminationDate;
    }

    public String getSettlementDateOffset() {
        return SettlementDateOffset;
    }

    public void setSettlementDateOffset(String settlementDateOffset) {
        SettlementDateOffset = settlementDateOffset;
    }

    public String getFixingDate() {
        return FixingDate;
    }

    public void setFixingDate(String fixingDate) {
        FixingDate = fixingDate;
    }

    public String getNotional() {
        return Notional;
    }

    public void setNotional(String notional) {
        Notional = notional;
    }

    public String getTerm() {
        return Term;
    }

    public void setTerm(String term) {
        Term = term;
    }

    public String getSpotPrice() {
        return SpotPrice;
    }

    public void setSpotPrice(String spotPrice) {
        SpotPrice = spotPrice;
    }

    public String getObserveType() {
        return ObserveType;
    }

    public void setObserveType(String observeType) {
        ObserveType = observeType;
    }

    public String getTriggerRate() {
        return TriggerRate;
    }

    public void setTriggerRate(String triggerRate) {
        TriggerRate = triggerRate;
    }

    public String getTriggerLevelInclude() {
        return TriggerLevelInclude;
    }

    public void setTriggerLevelInclude(String triggerLevelInclude) {
        TriggerLevelInclude = triggerLevelInclude;
    }

    public String getOptionType() {
        return OptionType;
    }

    public void setOptionType(String optionType) {
        OptionType = optionType;
    }

    public String getLowerStrikeRate() {
        return LowerStrikeRate;
    }

    public void setLowerStrikeRate(String lowerStrikeRate) {
        LowerStrikeRate = lowerStrikeRate;
    }

    public String getUpperStrikeRate() {
        return UpperStrikeRate;
    }

    public void setUpperStrikeRate(String upperStrikeRate) {
        UpperStrikeRate = upperStrikeRate;
    }

    public String getStrikeRate() {
        return StrikeRate;
    }

    public void setStrikeRate(String strikeRate) {
        StrikeRate = strikeRate;
    }

    public String getStrikeInclude() {
        return StrikeInclude;
    }

    public void setStrikeInclude(String strikeInclude) {
        StrikeInclude = strikeInclude;
    }

    public String getIfAnnual() {
        return IfAnnual;
    }

    public void setIfAnnual(String ifAnnual) {
        IfAnnual = ifAnnual;
    }

    public String getDayCounter() {
        return DayCounter;
    }

    public void setDayCounter(String dayCounter) {
        DayCounter = dayCounter;
    }

    public String getMinYield() {
        return MinYield;
    }

    public void setMinYield(String minYield) {
        MinYield = minYield;
    }

    public String getRebateRate() {
        return RebateRate;
    }

    public void setRebateRate(String rebateRate) {
        RebateRate = rebateRate;
    }

    public String getParticipationRate() {
        return ParticipationRate;
    }

    public void setParticipationRate(String participationRate) {
        ParticipationRate = participationRate;
    }

    public String getPayStyle() {
        return PayStyle;
    }

    public void setPayStyle(String payStyle) {
        PayStyle = payStyle;
    }

    public String getScheduleType() {
        return ScheduleType;
    }

    public void setScheduleType(String scheduleType) {
        ScheduleType = scheduleType;
    }


}
